home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / network / lattice / portlib.lzh / PORTLIB / SIGVEC.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-20  |  988 b   |  57 lines

  1. /*
  2.  * BSD signal handleing emulation.
  3.  *
  4.  * (w) 1994, Kay Roemer.
  5.  */
  6.  
  7. #include <sigvec.h>
  8. #include <errno.h>
  9.  
  10. extern int errno;
  11.  
  12. int
  13. sigvec (sig, sv, osv)
  14.     int sig;
  15.     struct sigvec *sv, *osv;
  16. {
  17.     struct sigaction sa, osa;
  18.     int i, r;
  19.     
  20.     if (sv) {
  21.         if (sv->sv_flags & (SV_ONSTACK|SV_INTERRUPT|SV_RESETHAND)) {
  22.             errno = EINVAL;
  23.             return -1;
  24.         }
  25.         sa.sa_handler = sv->sv_handler;
  26.         sa.sa_flags = sv->sv_flags;
  27.         sigemptyset (&sa.sa_mask);
  28.         for (i = 0; i < __NSIG; ++i) {
  29.             if (sv->sv_mask & (1L << i)) {
  30.                 sigaddset (&sa.sa_mask, i);
  31.             }
  32.         }
  33.     }
  34.     r = sigaction (sig, sv ? &sa : 0, osv ? &osa : 0);
  35.     if (r < 0) return r;
  36.  
  37.     if (osv) {
  38.         osv->sv_handler = osa.sa_handler;
  39.         osv->sv_flags = osa.sa_flags;
  40.         osv->sv_mask = 0;
  41.         for (i = 0; i < __NSIG; ++i) {
  42.             if (sigismember (&osa.sa_mask, i)) {
  43.                 osv->sv_mask |= (1L << i);
  44.             }
  45.         }
  46.     }
  47.     return r;
  48. }
  49.  
  50. int
  51. siginterrupt (sig, fail)
  52.     int sig, fail;
  53. {
  54.     errno = EINVAL;
  55.     return -1;
  56. }
  57.